package com.turing.post.organization.util;

import java.math.BigInteger;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 凭证库存表接口
 * 
 * @author wzd
 * @2013-03-13
 */
@Remote
@Local
public interface VoucherStockDao {

	/**
	 * 根据条件查询凭证库存表列表
	 * 
	 * @param toBranchNo
	 *            调入机构号
	 * @param status
	 *            状态
	 * @param voucherId
	 *            凭证种类ID
	 * @param voucherNo
	 *            凭证号
	 * @param page
	 *            页码
	 * @return 凭证库存表列表
	 */
	public List<VoucherStock> getVoucherStockList(PCPSWebInput webInput,
			String BranchNo, String status,
			String voucherId, String startNo, String endNo,Boolean isSingle, Integer page);

	/**
	 * 根据条件查询凭证库存表记录数
	 * 
	 * @param toBranchNo
	 *            调入机构号
	 * @param status
	 *            状态
	 * @param voucherId
	 *            凭证种类ID
	 * @param voucherNo
	 *            凭证号
	 * @param page
	 * @return 凭证库存表录数
	 */
	public BigInteger getVoucherStockListTotal(PCPSWebInput webInput,
			String BranchNo,String status,
			String voucherId, String startNo, String endNo,Boolean isSingle);

	/**
	 * 新增凭证库存表
	 * 
	 * @param VoucherStock
	 *            凭证库存表
	 * @throws PCPSApplicationException
	 */
	public void insertVoucherStock(VoucherStock voucherStock)
			throws PCPSApplicationException;

	/**
	 * 修改凭证库存表状态
	 * 
	 * @param VoucherStock
	 *            凭证库存
	 * @throws PCPSApplicationException
	 */
	public void updateVoucherStockByStatus(VoucherStock voucherStock)
			throws PCPSApplicationException;

	/**
	 * 删除凭证库存表
	 * 
	 * @param VoucherStock
	 *            凭证库存
	 * @throws PCPSApplicationException
	 */
	public void deleteVoucherStock(VoucherStock voucherStock)
			throws PCPSApplicationException;

	/**
	 * 根据条件查询凭证库存列表对象
	 * 
	 * @param VoucherStock
	 *            凭证调拨单id
	 * @throws PCPSApplicationException
	 */
	public VoucherStock getVoucherStock(VoucherStock voucherStock)
			throws PCPSApplicationException;

	/**
	 * 根据凭证种类ID和凭证号检索库存数量
	 * 
	 * @param voucherId
	 *            凭证种类id
	 * @param StartVoucherNo
	 *            起始凭证号
	 * @param EndVoucherNo
	 *            终止凭证号
	 * @throws PCPSApplicationException
	 */
	public BigInteger getVoucherStockListTotal(PCPSWebInput webInput,
			BigInteger voucherId, String StartVoucherNo, String EndVoucherNo,
			String Status);

	/**
	 * 根据凭证种类ID和凭证号检索库存凭证种类列表
	 * 
	 * @param voucherId
	 *            凭证种类id
	 * @param StartVoucherNo
	 *            起始凭证号
	 * @param EndVoucherNo
	 *            终止凭证号
	 * @throws PCPSApplicationException
	 */
	public List<Object[]> getVoucherStockVoucherIdList(PCPSWebInput webInput,
			String StartVoucherNo, String EndVoucherNo);

	/**
	 * 根据条件查询凭证库存表列表--不分页
	 * 
	 * @param status
	 *            状态
	 * @param voucherId
	 *            凭证种类id
	 * @param srartVoucherNo
	 *            起始凭证号
	 * @param endVoucherNo
	 *            终止凭证号
	 * @return 凭证库存表列表
	 */
	public List<VoucherStock> getVoucherStockListNoPage(PCPSWebInput webInput,
			String srartVoucherNo, String endVoucherNo, String status,
			BigInteger voucherId);

	/**
	 * 根据条件查询凭证库存表列表
	 * 
	 * @param BranchNo
	 *            机构号
	 * @param voucherId
	 *            凭证种类ID
	 * @param page
	 *            页码
	 * @return 凭证库存表列表
	 */
	public List<Object[]> getVoucherStockIndexList(PCPSWebInput webInput,
			String BranchNo, String voucherId);

	/**
	 * 以锁定方式获取卡库存信息
	 * 
	 * @param voucherStock
	 * @return
	 */
	public VoucherStock getVoucherStockForUpdate(VoucherStock voucherStock);

	/**
	 * 根据凭证种类ID和凭证号检索库存数量
	 * 
	 * @param voucherId
	 *            凭证种类id
	 * @param StartVoucherNo
	 *            起始凭证号
	 * @param EndVoucherNo
	 *            终止凭证号
	 * @param status
	 *            状态
	 * @throws PCPSApplicationException
	 */
	public BigInteger getVoucherStockListByStatusTotal(PCPSWebInput webInput,
			BigInteger voucherId, String StartVoucherNo, String EndVoucherNo,
			String status);

	/**
	 * 根据凭证种类ID和凭证号检索库存数量
	 * 
	 * @param voucherId
	 *            凭证种类id
	 * @param StartVoucherNo
	 *            起始凭证号
	 * @param EndVoucherNo
	 *            终止凭证号
	 * @param issuebranchno
	 *            发卡机构编号
	 * @throws PCPSApplicationException
	 */
	public BigInteger getVoucherStockListByBranchNoTotal(String issuebranchno,
			BigInteger voucherId, String StartVoucherNo, String EndVoucherNo);
	
	/**
	 * 查询凭证号
	 * @param voucherNo
	 * @param input
	 * @return
	 * @throws PCPSApplicationException
	 */
	public VoucherStock getVoucherStockByVoucherNo(String voucherNo,
			PCPSWebInput input);
	/**
	 * 根据条件查询凭证库存表列表
	 * 
	 * @param toBranchNo
	 *            调入机构号
	 * @param status
	 *            状态
	 * @param voucherId
	 *            凭证种类ID
	 * @param voucherNo
	 *            凭证号
	 * @return 凭证库存表号段列表
	 */
	public List<Object[]> getVoucherStockByCon(PCPSWebInput webInput,
			String BranchNo, String status,
			String voucherId, String startNo, String endNo,Boolean isSingle);
	/**
	 * 根据凭证种类，机构号，发卡商,状态查询,
	 */
	public List<Object[]>getVoucherStockByBrNo(PCPSWebInput webInput,
			String BranchNo,String voucherId);
}
